﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;  

using CapaDatos;

namespace CapaNegocios
{
    [Serializable]
    public class CentroReparacion
    {
        private string razonSocial;
        private List<Electrodom> lElectrodomesticos;
        private List<Presupuesto> lPresupuestos;
        private List<Repuesto> lRepuestos;

        public CentroReparacion(string rs)
        {
            razonSocial = rs;
            lElectrodomesticos = new List<Electrodom>();
            lPresupuestos = new List<Presupuesto>();
            lRepuestos = new List<Repuesto>();
        }


        public CentroReparacion()
        {
            razonSocial = "Centro de Reparación";
            lElectrodomesticos = new List<Electrodom>();
            lPresupuestos = new List<Presupuesto>();
            lRepuestos = new List<Repuesto>();
        }


        public string RazonSocial { get; set; }

        // Metodo para obtener toda la lista de Presupuestos
        public List<Presupuesto> getTodosPresupuestos()
        {
            return lPresupuestos;
        }

        // Metodo para obtener toda la lista de Repuestos
        public List<Repuesto> getTodosRepuestos()
        {
            return lRepuestos;
        }

        // Metodo de busqueda de Electrodomestico por id
        public Electrodom getElectrodomestico(int id)
        {
           Electrodom result = lElectrodomesticos.Find(
            delegate(Electrodom e)
            {
                return e.Id == id;
            }
            );
           return result;
        }

        // Metodo de busqueda de Presupuesto por id
        public Presupuesto getPresupuesto(int id)
        {
            Presupuesto result = lPresupuestos.Find(
             delegate(Presupuesto p)
             {
                 return p.Id == id;
             }
             );
            return result;
        }


        // Metodo de busqueda de Repuesto por id
        public Repuesto getRepuesto(int id)
        {
            Repuesto result = lRepuestos.Find(
             delegate(Repuesto r)
             {
                 return r.Id == id;
             }
             );
            return result;
        }

        //
        // Metodos para agregar
        //
        //falta verificar el id para que no agregue repetidos

        public void agregarRepuesto(Repuesto r)
        {
            lRepuestos.Add(r);
        }

        public void agregarPresupuesto(Presupuesto p)
        {
            lPresupuestos.Add(p);
        }

        public void agregarElectrodomestico(Electrodom e)
        {
            lElectrodomesticos.Add(e);
        }


        // Metodo que devuelve el Id para un nuevo presupuesto(la longitud de la lista + 1)
        public int getNuevoIdPresup()
        {
            return lPresupuestos.Count() + 1;
        }

        // Metodo que devuelve el Id para un nuevo repuesto(la longitud de la lista + 1)
       public int getNuevoIdRep()
       {
            return lRepuestos.Count() + 1;
        }


        // Metodos para Guardar y Cargar
       public static CentroReparacion Cargar()
       {
           CentroReparacion cR = (CentroReparacion)Datos.Cargar();
           if (cR == null)
               cR = new CentroReparacion();
           return cR;
       }

       public bool Guardar()
       {
           return Datos.Guardar(this);
       }
       
       public void eliminarPresupuesto(Presupuesto presupuesto)
       {
           lPresupuestos.Remove(presupuesto);
       }

       public void eliminarRepuesto(Repuesto repuesto)
       {
           lRepuestos.Remove(repuesto);
       }

    }

}
